package com.base.cn.platform.os.entity.classes;

import com.base.cn.platform.os.common.annotation.ImgAttr;
import com.base.cn.platform.os.common.mybatis.BaseEntity;
import com.base.cn.platform.os.common.utils.DataUtil;
import com.base.cn.platform.os.entity.classes.member.ClassesMember;
import com.base.cn.platform.os.entity.course.cou.Course;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.List;

/**
 * 班级
 *
 * @author SK
 * @since 2018-05-08
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class Classes extends BaseEntity {

    // 班级名称
    private String name;
    // 班级简介
    @ImgAttr
    private String summary;
    // 班级类型 1.课程班级 2.自由班级
    private Integer classesType;
    // 课程班级时的课程id
    private BigDecimal courseId;
    // 满班 1.是 2.否
    private Integer full;
    // 班级内最大学员数
    private Integer studentLimitCount;
    // 班级话题量
    private Integer topicCount;
    // 班级学员量
    private Integer studentCount;
    // 班级内学员总学习时长
    private Long totalLearnTime;
    // 班级本期学习排名
    private Long rank;
    // 班级上期学习排名
    private Long lastRank;

    // 根据课程id查询班级
    private String courseIds;
    // 根据课程id班级
    private String ids;
    // 班级关联的课程
    private Course course;
    // 班级成员
    private List<ClassesMember> memberList;
    // 剩余可添加学员数
    private int left;

    //班级关联的班主任id
    private String headmasterIds;

    public String getCourseIds() {
        return DataUtil.filterNotNumberStr(courseIds);
    }

    /**
     * 设置班级学员数。同时根据学员数更新满班状态
     *
     * @param studentCount 学员数
     */
    public void setStudentCount(int studentCount) {
        if (studentLimitCount > 0 && studentCount == studentLimitCount) {
            this.full = 1;
        }
        this.studentCount = studentCount;
    }

    /**
     * 是否自由班级
     *
     * @return {@code true}是，否则返回{@code false}
     */
    public boolean isFree() {
        return this.classesType == 2;
    }

    /**
     * 班级学员数是否超出学员数上限
     *
     * @return {@code true}超出,否则返回{@code false}
     */
    public boolean isOverflow() {
        return studentLimitCount==0 ? false : this.studentCount > this.studentLimitCount;
    }

    public void left() {
        this.left = this.studentLimitCount - this.studentCount;
    }

}
